From 9f12e09de41c60cb9c6945b01f3d10e54e39a2db Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild2.aw" Date: Sun, 18 Feb 2007 16:00:52 -0700 Subject: [PATCH] [IA64] Paravirtualize mmap handlers of /proc/bus/pci Signed-off-by: Akio Takebe --- linux-2.6-xen-sparse/arch/ia64/pci/pci.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/linux-2.6-xen-sparse/arch/ia64/pci/pci.c b/linux-2.6-xen-sparse/arch/ia64/pci/pci.c index 60b45e79f0..4d3684156a 100644 --- a/linux-2.6-xen-sparse/arch/ia64/pci/pci.c +++ b/linux-2.6-xen-sparse/arch/ia64/pci/pci.c @@ -607,6 +607,14 @@ pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma, else vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + if (is_initial_xendomain()) { + unsigned long addr = vma->vm_pgoff << PAGE_SHIFT; + size_t size = vma->vm_end - vma->vm_start; + unsigned long offset = HYPERVISOR_ioremap(addr, size); + if (IS_ERR_VALUE(offset)) + return offset; + } + if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN; @@ -664,6 +672,14 @@ pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma) vma->vm_pgoff += (unsigned long)addr >> PAGE_SHIFT; vma->vm_page_prot = prot; + if (is_initial_xendomain()) { + unsigned long addr = vma->vm_pgoff << PAGE_SHIFT; + size_t size = vma->vm_end - vma->vm_start; + unsigned long offset = HYPERVISOR_ioremap(addr, size); + if (IS_ERR_VALUE(offset)) + return offset; + } + if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, size, vma->vm_page_prot)) return -EAGAIN; -- 2.30.2